﻿using System;
using System.Diagnostics;
using SAPbobsCOM;
using SapFramework.Exceptions.Sbo;

namespace SapFramework.Extension.Database
{
    /// <summary>
    /// Utilitário para a classe Company do SAP Business One
    /// </summary>
    public static class CompanyExtension
    {
        /// <summary>
        /// Verifica se ocorreu um erro durante a execução de uma operação na DI API do SAP Business One, 
        /// lançando uma exceção com os dados do erro, caso o mesmo tenha ocorrido.
        /// </summary>
        /// <remarks>
        /// Este método deve ser invocado após a chamada de funções na DI API que retornem um valor inteiro.
        /// </remarks>
        /// <param name="aDatabase">Objeto com a conexão a base de dados da DI API</param>
        /// <param name="aInner">Uma outra exceção que pode ser concatenada a esta.</param>
        /// <exception cref="DiApiException">Lança esta exceção quando houver alguma falha em um processo da DI API </exception>
        public static void ExceptionOnFailure( this Company aDatabase, Exception aInner = null )
        {
            Debug.Assert( aDatabase != null, "aDatabase não pode ser nula." );

            int lIntError;

            string lStrError;

            aDatabase.GetLastError( out lIntError, out lStrError );

            if ( lIntError != 0 )
            {
                if( aInner == null )
                {
                    throw new DiApiException( lIntError, lStrError );
                }
                else
                {
                    throw new DiApiException( lIntError, lStrError, aInner );
                }                
            }
        }
    }
}